package org.qq.serverthread;

import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.URISyntaxException;
import java.util.ArrayList;

import org.qq.ui.ServerJframe;
import org.qq.util.ServerAllData;
import org.qq.util.Util;
import org.qq.util.userReadFile;

/**
 * 
 * project_name:QQ
 * package_name:org.qq.serverthread
 * file_name:SerLoginReplyThread.java
 * @author Link
 * create_date:2015年8月29日下午9:18:55
 * modified_date:
 * description: 服务器端答复线程
 *
 */
public class SerLoginReply{
	
	private ArrayList<String> userInformation= new ArrayList<String>();	//存储用户信息集合
	private String str;													//输入的账号和密码字符串
	private Socket s;													//登录用户套接字
	private PrintStream ps = null;
	private File file;
	private ArrayList<String> userOnline = new ArrayList<String>();		//在线用户信息
	private ArrayList<String> userOffline = new ArrayList<String>();	//离线用户信息
	
	public SerLoginReply() {
		super();
	}

	public SerLoginReply(String str,Socket s) {
		super();
		this.str = str;
		this.s = s;
		try {
			ps = new PrintStream(s.getOutputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			file = new File(SerLoginReply.class.getResource("/file/用户注册信息.txt").toURI());
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}
		userInformation = new userReadFile(file).readFile();//调用读取用户信息类将用户信息存储到集合userInformation中
	}
	
	/**
	 * 
	 * description: 发消息到用户登录端
	 * 2015年8月31日 下午2:43:12
	 * @author Link
	 * void
	 *
	 */
	public synchronized void sendMessagetToLonClient(){
		String str1 = str.substring(0, str.length()-10);//截取户名和密码部分
		String namestr = str.substring(3, 11);//截取账号部分
		if(Util.judgeNameIsLoginMethod(namestr)){//判断此账号是否已经登录
			ps.println("online----login");
		}else if(Util.judgeLoginMethod(userInformation, str1)){//调用Util包里面判断输入账号和密码是否正确方法
			saveLoginUserMethod(str1);//调用保存用户信息方法
			ps.println("true----login");
			sendUserInfomation();//调用发送好友信息至客户端
			sendUserOlineToClient(s, namestr);//发送好友上线信息至客户端
		}else if(!Util.judgeLoginMethod(userInformation, str1)){//密码或账号错误
			ps.println("false----login");
		}
		
		
		
	}
	
	/**
	 * 
	 * description: 保存用户登录信息方法
	 * 2015年9月1日 下午3:12:33
	 * @author Link
	 * void
	 *
	 */
	public void saveLoginUserMethod(String str){
		String name = str.substring(3, 11); //截取用户名部分
		String nickName = Util.gainNickNameMethod(userInformation, name);//调用Util包里根据帐号获取对应昵称方法
		ServerAllData.mapList.put(s, nickName);		//将对应在线用户信息(Socket,账号昵称)添加到AllData.mapList里面
		ServerAllData.nameList.put(s, name);			//将对应在线用户信息(Socket,账号)添加到AllData.nameList里面
		ServerAllData.nameToNickName.put(name, nickName);//存储在线用户账号对应的昵称
		ServerAllData.socket.add(s);			//存储Socket
		ServerAllData.onlineName.add(name);    //存储在线用户账号
		ServerAllData.nameToSocket.put(name, s);//存储账号对应的Socket
	}
	
	/**
	 *  
	 * description: 登录时好友列表
	 * 2015年9月6日 下午3:16:18
	 * @author Link
	 * void
	 *
	 */
	public void sendUserInfomation(){
		userOnline = Util.userOnlineNickNameMethod();//调用Util包里面获取在线用户昵称(账号)方法
		for (String string : userOnline) {
			ps.println(string+"----onlineUser");
		}
		userOffline = Util.offLineUserNickNameMethod(Util.allUserNickNameInfoMethod(Util.allUserInformationMethod(userInformation)), userOnline);//调用Util包里获取离线用户昵称(账号)部分
		for (String string : userOffline) {
			ps.println(string+"----offlineUser");
		}
	}
	/**
	 * 
	 * description: 发送好友上线至用户端
	 * creatTime:2015年9月4日下午11:48:05
	 * @author Link
	 * return type: void
	 *
	 */
	public synchronized void sendUserOlineToClient(Socket s,String namestr){
		PrintStream ps1 = null;
		for(int i = 0;i<ServerAllData.socket.size();i++){
			if(s!=ServerAllData.socket.get(i)){
				try {
					ps1 = new PrintStream(ServerAllData.socket.get(i).getOutputStream());
					String nickName = ServerAllData.nameToNickName.get(namestr);
					ps1.println("----login----"+nickName+"("+namestr+")");
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
}








